package zjwt

import (
	"github.com/gin-gonic/gin"
	"github.com/golang-jwt/jwt/v5"
)

type Handler interface {
	/*** 工具方法 ***/
	// 登录成功后设置长短 token
	SetLoginToken(ctx *gin.Context, uid int64) error

	/*** 中间件 ***/
	// 检查登录
	CheckLoginMdw(ctx *gin.Context)
	// 添加不需要登录 path，可调用多次
	IgnorePaths(path string) Handler

	/*** 路由 handler ***/
	// 用 refresh_token 刷新 access_token，这个路由不需要检查登录中间件
	RefreshToken(ctx *gin.Context)
	// 退出登录，清除 jwt
	LogoutJWT(ctx *gin.Context)
}

type RefreshClaims struct {
	jwt.RegisteredClaims
	// 必须有这两个字段
	Uid  int64
	Ssid string
}

type UserClaims struct {
	jwt.RegisteredClaims
	// 必须有这两个字段
	Uid  int64
	Ssid string
}
